#include <bits/stdc++.h>
using namespace std;

int a[2010]; // 存储每种重量的钻石的价格
int f[2010][2010]; // 前i个数，正好装满体积为j的背包的最大价值

int main() {
  int n; // 钻石的总克拉数
  cin >> n; // 输入总克拉数
  for (int i = 1; i <= n; i++)
    cin >> a[i]; // 输入每种重量的钻石的价格

  memset(f, -0x3f, sizeof f); // 初始化动态规划数组，设置为一个很小的值
  f[0][0] = 0; // 0个钻石，0克拉的最大价值为0

  for (int i = 1; i <= n; i++) { // 遍历每种钻石
    for (int j = 0; j <= n; j++) { // 遍历每个可能的总克拉数
      if (j - i >= 0) // 如果当前总克拉数大于等于当前钻石的克拉数
        f[i][j] = max(f[i][j - i] + a[i], f[i - 1][j]); // 选择切割或不切割当前钻石
      else
        f[i][j] = f[i - 1][j]; // 不切割当前钻石
    }
  }

  cout << f[n][n]; // 输出最大价值
  return 0; // 程序结束
}